#-*- coding: utf-8 -*-

import os
import sqlite3
import csv
import sys
import wx
import urllib2
from BeautifulSoup import BeautifulSoup
from subprocess import call
import webbrowser




def iniciar_db (x_times):
    '''
    Cria uma base de dados a partir de um ficheiro CSV
    '''
    fileCSV = open('reb{0}.csv'.format(x_times), 'rb')
    spamReader = csv.reader( fileCSV, delimiter = ',')

    conn = sqlite3.connect("teste.db")
    c = conn.cursor()

    #apaga a tabela e cria uma nova
    if x_times == 0:
        conn.execute (''' drop table if exists docentes''')
        conn.execute('''create table if not exists docentes (cod_docente integer, nome text, ultimo_grau text, curso text, categoria text, regime text, ano text,
                       tipo_estabelecimento text, nome_establecimento text)''')
        conn.commit()
        pass
    
    spamReader.next()
    #preenche os dados da Base de dados
    for row in spamReader:
        
    
        conn.execute(''' insert into docentes values ("{0}", "{1}", "{2}", "{3}", "{4}", "{5}", "{6}", "{7}", "{8}")'''.\
                  format(row[0].replace('"', ' '), row[1].replace('"', ' '), row[2].replace('"', ' '), row[3].replace('"', ' '), row[4].replace('"', ' ') \
                         , row[5].replace('"', ' '), row[6].replace('"', ' '), row[7], row[8].replace('"', ' ')))
        pass
    
    fileCSV.close()
    conn.commit()
    conn.close()
           
    pass

def criar_db():
    '''
    Preenche a Base de dados a partir de todos os ficheiros csv 
    '''
    for i in range (0, 11):
        iniciar_db(i)
        print 'sucesso'
        pass
    pass
        
def lista_db():
    '''
    carrega os dados da Base de Dados para uma lista
    '''
    conn = sqlite3.connect("teste.db")
    c = conn.cursor()

    c.execute(''' select * from docentes ''')
    lista = []
    for x in c.fetchall():
        lista.append(x)
        pass
    conn.close()           
    return lista


def carregar_Lista_Ctrl(self, lista, list_ctrl, col):
    '''
    carrega os dados da lista para o interface
    '''
    x = 0
    list_ctrl.DeleteAllItems()
    for lin in lista:
        #cria um string item na list_ctrl
        
        if x != len(lista):
            index = list_ctrl.InsertStringItem(x, '')
            pass
        x += 1
        
        for i in range(len(lin)):
            #preenche o item da lista_ctrl com os valores da lista, caso seja
            #do tipo unicode guarda de maneira diferente
            if type(lin[i]) is not unicode:    
                list_ctrl.SetStringItem(index,i, str(lin[i]))
            else:
                list_ctrl.SetStringItem(index,i, (lin[i]).encode('utf-8'))
                pass
            pass
            
        pass
    pass

def guardarCsv(estatistica, lista):
    '''
    guarda as estatisticas em ficheiros csv 
    '''
   
    ficheiro = open('Estatisticas_{0}.csv'.format(estatistica),"wb")
    csvwriter = csv.writer( ficheiro, delimiter=',')
    #para cada estatistica o cabeçalho dd CSV é diferente
    if estatistica == 1:
        csvwriter.writerow(("Ano","N Professores"))
    elif estatistica == 2:
        csvwriter.writerow(("Ano","Nome Estabelecimento","Categoria","Numero de Professores"))
    elif estatistica == 3:
        csvwriter.writerow(("Ano","Nome Estabelecimento","Grau","Categoria", "Numero de Professores"))    
        pass
    #Insere os dados no ficheiro, consoante a estatistica o numero de colunas difere
    if estatistica == 1:
        for x in lista:
            csvwriter.writerow(((x[0]).encode('utf-8'),x[1]))
            pass
    elif estatistica == 2:
        for x in lista:
            csvwriter.writerow(((x[0]).encode('utf-8'),(x[1]).encode('utf-8'),\
                                (x[2]).encode('utf-8'),x[3]))
            pass
    elif estatistica ==3:
        for x in lista:
            csvwriter.writerow(((x[0]).encode('utf-8'),(x[1]).encode('utf-8'),\
                                (x[2]).encode('utf-8'),(x[3]).encode('utf-8'),x[4]))
            pass
        pass
    ficheiro.close()
   
    pass

def estatisticas_Html(estatistica, lista):
    '''
    guarda num ficherio html uma tabela com os dados das estatisticas
    '''

    txtHTML = open('Estatisticas_{0}.html'.format(estatistica),"wb")
    txtHTML.write("<html><head><title>Estatiscas_professores</title></head>")
    txtHTML.write("<body><h1>Professores do Ensino Superior</h1>")
    txtHTML.write("<table border='1' id='Tabela' width='100%'>")
    txtHTML.write("<tr>")
    #Um cabeçalho diferente para cada estatistica
    if estatistica == 1:
        txtHTML.write("<th>Ano</th><th>Numero de Estabelecimentos</th>")
    elif estatistica == 2:
        txtHTML.write("<th>Ano</th><th>Nome Estabelecimento</th>")
        txtHTML.write("<th>Categoria</th><th>Numero de Professores</th>")
    elif estatistica == 3:
        txtHTML.write("<th>Nome Estabelecimento</th><th>Ano</th>")
        txtHTML.write("<th>Grau</th><th>Categoria</th><th>Numero de Professores</th>")
        pass
    txtHTML.write("</tr>")
    #escreve os dados na tabela e verifica se é string, se for tem uma codificação diferente
    for x in lista:         
        txtHTML.write("<tr>")  
        for i in x:
            if type(i) is int:
                txtHTML.write("<td>{0}</td>".format((i)))
            else:
                txtHTML.write("<td>{0}</td>".format((i).encode('utf-8')))
            pass
        txtHTML.write("</tr>")
        pass
    txtHTML.write("</table>")
    txtHTML.write("</body>")
    txtHTML.write("</html>")
    txtHTML.close()
   
    pass


def contarTagsHTML(url):  
    '''
    Conta as tags html de uma página HTML e guarda-as numa lista
    '''        
    
    #abre a ligação para a página html
    pagina = urllib2.urlopen( url )

    #lê os dados da página html
    tags = pagina.read()
    
    h1 =[]
    h2 =[]
    h3 =[]
    div =[]
    p =[]
    ul =[]
    ol =[]
    resultado = []
    soup = BeautifulSoup(tags)
    #Encontra as tags na pagina HTML atraves do BeautifulSoup e coloca cada uma em uma lista
    h1.append(soup.findAll("h1", ))
    h2.append(soup.findAll("h2", ))
    h3.append(soup.findAll("h3", ))
    div.append(soup.findAll("div", ))
    p.append(soup.findAll("p", ))
    ul.append(soup.findAll("ul", ))
    ol.append(soup.findAll("ol", ))
    #Adiciona na lista as tags e as vezes que se encontram na página HTML
    resultado.append(("h1",len(h1[0])))
    resultado.append(("h2",len(h2[0])))
    resultado.append(("h3",len(h3[0])))
    resultado.append(("div",len(div[0])))
    resultado.append(("p",len(p[0])))
    resultado.append(("ul",len(ul[0])))
    resultado.append(("ol",len(ol[0])))
  
   
    return resultado

    pass

def simple_HTTP_Server():
    '''
    cria o servidor HTTP no localhost na porta 8000 para poder aceder aos HTMLs
    '''
    #o servidor é criado a partir da shell do linux isto para que a aplicação
    #não fique bloqueada, depois é aberto o browser já com o endereço do localhost
    call("python -m SimpleHTTPServer 8000", shell=True)
    webbrowser.open_new("http://127.0.0.1:8000")      
    pass
